package com.promote.algorithm;

/**
 * @ClassName HasCycle
 * Description 环形链表--判断链表是否有环
 * @Author LiZiHao
 * Date 2022/4/4 17:32
 * @Version 1.0
 **/
public class HasCycle {

    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    /**
     * 简单的一种方式就是快慢指针，慢指针针每次走一步，快指针每次走两步，如果相遇就说明有环，如果有一个为空说明没有环。
     * @param head
     * @return
     */
    public boolean hasCycle(ListNode head) {

        if (head == null) {
            return false;
        }

        ListNode slow = head;
        ListNode fast = head;

        while (fast != null && fast.next != null) {

            slow = slow.next;

            fast = fast.next.next;

            if (slow == fast) {
                return true;
            }
        }
        return false;
    }
}
